iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Python

30 天學會用 Python pandas 和 openpyxl 處理 Excel —— 成為用 Python 處理 Excel 檔案的高手系列 第 22

Python 使用 openpyxl 調整 Excel 儲存格對齊方式【Python 處理 Excel #22】

  • 分享至 

  • xImage
  •  

本篇文章同步發布於 Python 使用 openpyxl 調整 Excel 儲存格對齊方式【Python 處理 Excel #22】

前言

這篇文章介紹如何使用 Python 的 openpyxl 調整 Excel 儲存格的對齊方式。


案例資料說明

這篇文章使用到的 Excel 工作表內容如下:

order_id total_amount note
0001 10500 如果有問題請聯繫手機:0912-345-678。
0002 3000 請於10月17日之前送達。包裝上不需要附贈發票。
0003 1000 不熟悉產品安裝方式,需要上門安裝服務。

如何使用 openpyxl 調整 Excel 儲存格對齊方式?

下方的程式碼介紹在 openpyxl 中如何調整 Excel 儲存格的對齊方式:

from openpyxl.styles import Alignment

def set_alignment(ws):
    """
    對工作表中的每個儲存格套用對齊方式。

    Args:
        ws (Worksheet): openpyxl 的 Worksheet 物件。
    """
    alignment = Alignment(horizontal='left', vertical='center', indent=0)
    for row in ws.iter_rows():
        for cell in row:
            cell.alignment = alignment

# 使用函數
set_alignment(ws)

set_alignment 函數對工作表中的每個儲存格設置朝左和垂直居中的對齊方式,其中 Alignment 類別用於設定儲存格的對齊方式。

Alignment 參數解釋

  • horizontal:設定水平對齊方式,這裡設定為 'left',表示文字靠左對齊。
  • vertical:設定垂直對齊方式,這裡設定為 'center',表示文字在儲存格中垂直置中。
  • indent:設定縮排層級,這裡設定為 0,表示無縮排。

詳細解釋 Alignment 的用法

Alignment 類別提供了多種參數控制儲存格內容的對齊方式。

from openpyxl.styles import Alignment

alignment = Alignment(horizontal='left', vertical='center', text_rotation=0, wrap_text=True, shrink_to_fit=False, indent=0)

Alignment 常用參數

  • horizontal:水平對齊方式,例如 'general''left''center''right''fill''distributed' 等。
  • vertical:垂直對齊方式,例如 'top''center''bottom''justify''distributed'
  • text_rotation:文字旋轉角度,角度從 0 到 180 度。
  • wrap_text:是否自動換列,值為 TrueFalse
  • shrink_to_fit:是否根據儲存格大小縮小文字以適應儲存格,值為 TrueFalse
  • indent:設定文字的縮排層級,值為整數。

Alignment 使用方式

以下方法可以針對單個儲存格設定對齊方式:

from openpyxl.styles import Alignment

alignment = Alignment(horizontal='left', vertical='center')

cell = ws['A1']
cell.alignment = alignment

或是

from openpyxl.styles import Alignment

cell = ws['A1']
cell.alignment = Alignment(horizontal='center', vertical='center')

如果需要為多個儲存格設定相同的對齊方式,可以建立一個 Alignment 對象並重複使用:

from openpyxl.styles import Alignment

centered = Alignment(horizontal='center', vertical='center')
for row in ws['A1:C5']:
    for cell in row:
        cell.alignment = centered

這樣就可以對多個儲存格設定相同的對齊方式。


針對特定欄位開啟自動換列

如果儲存格內容太長,可以透過 Excel 的自動換列讓文字隨著儲存格的寬度自動換列,這樣的功能對應到 openpyxl 的 Alignment 是透過 wrap_text 參數決定是否自動換列。

例如在這篇文章中,希望對 note 欄位開啟自動換列功能,以下是開始自動換列的程式碼:

def enable_wrap_text(ws, column_headers):
    """
    對指定的欄位啟用自動換列功能。

    Args:
        ws (Worksheet): openpyxl 的 Worksheet 物件。
        column_headers (list): 需要啟用自動換列功能的欄位名稱列表。
    """
    wrap_alignment = Alignment(horizontal='left', vertical='center', indent=0, wrap_text=True)
    for col in range(1, ws.max_column + 1):
        header = ws.cell(row=1, column=col).value
        if header in column_headers:
            for row in range(1, ws.max_row + 1):
                cell = ws.cell(row=row, column=col)
                cell.alignment = wrap_alignment

# 使用函數
enable_wrap_text(ws, ['note'])

enable_wrap_text 函數讓使用者可以透過傳入欄位名稱列表設定需要自動換列的欄位。因為是透過儲存格的 alignment 屬性決定是否自動換列,所以通常我會在前面的 set_alignment 函數執行過後才使用 enable_wrap_text 函數,也就是先設定完整體的對齊方式,再針對需要自動換列的欄位進行調整。


測試用的程式碼案例

如果想要嘗試使用 openpyxl 調整儲存格的對齊方式,可以使用以下程式碼測試:

from openpyxl import Workbook
from openpyxl.styles import Alignment

def create_sample_excel():
    """
    建立一個 demo 的 Excel 檔案並調整欄寬與設定對齊方式。
    """
    # 建立 Workbook
    wb = Workbook()
    ws = wb.active
    ws.title = 'demo'

    # 增加欄位名稱與資料
    headers = ['order_id', 'total_amount', 'note']
    data = [
        ['0001', 10500, '如果有問題請聯繫手機:0912-345-678。'],
        ['0002', 3000, '請於10月17日之前送達。包裝上不需要附贈發票。'],
        ['0003', 1000, '不熟悉產品安裝方式,需要上門安裝服務。']
    ]
        
    ws.append(headers)
    for row in data:
        ws.append(row)

    # 設定對齊方式
    set_alignment(ws)

    # 啟用自動換列
    enable_wrap_text(ws, ['note'])

    # 儲存活頁簿
    wb.save('output.xlsx')

# 執行案例
if __name__ == "__main__":
    create_sample_excel()

總結

  • Alignment 類別提供多種選項控制儲存格內容的對齊和顯示方式,包括水平和垂直對齊、自動換列等。
  • 透過設定 Alignmentwrap_text 參數可以達到 Excel 儲存格自動換列的效果。

本篇文章同步發布於 Python 使用 openpyxl 調整 Excel 儲存格對齊方式【Python 處理 Excel #22】


上一篇
Python 使用 openpyxl 調整 Excel 欄位寬度【Python 處理 Excel #21】
下一篇
Python 使用 openpyxl 將 Excel 格式化為表格【Python 處理 Excel #23】
系列文
30 天學會用 Python pandas 和 openpyxl 處理 Excel —— 成為用 Python 處理 Excel 檔案的高手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言